/*
api封装基本使用
1:下载axios
2:导入
3：创建axios副本
4：副本中配制基地址
5：配制请求拦截与响应拦截
6：暴露出去
7：定义测试的api
8:调用api
自定义环境变量
定义开发环境的环境变量
1：项目的根目录下创建一个.env.development
2:定义变量
  规则：以  VUE_APP_开头
      例 ：  VUE_APP_URL="http://localhost:3000/api"
3:访问：
    process.env.VUE_APP_URL

定义生产环境的环境变量
1：项目的根目录下创建一个.env.production
2:定义变量
  规则：以  VUE_APP_开头
      例 ：  VUE_APP_URL="http://119.91.150.211:3000/api"
3:访问：
    process.env.VUE_APP_URL

特点自动根据相应环境使用相应的环境变量值
注意点：修改了webpack配制一定要重启脚手架

token超时：
   拦截token超时
   删除token,删除用户信息，跳转到登陆页
*/
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router' // router===this.$router
// process.env.NODE_ENV === 'production' 生产
// process.env.NODE_ENV === 'development' 开发
const _axios = axios.create({
  // baseURL: 'http://localhost:3000/api'
  baseURL: process.env.VUE_APP_URL,
  withCredentials: true // 跨域请求加入cookie
  // baseURL:
  //   process.env.NODE_ENV === 'development'
  //     ? 'http://localhost:3000/api'
  //     : 'http://119.91.150.211:3000/api'
})
_axios.interceptors.request.use(
  (config) => {
    // 所有接口都加请求头token
    config.headers.Authorization = `Bearer ${store.state.login.token}`
    // 需要传token的才传，不需要的不要传
    // 在请求配制中加上一个字段用于确定是否需要token,再回到请求拦截加token前判断
    // console.log('config', config)
    // if (!config.noToken) {
    //   config.headers.Authorization = `Bearer ${store.state.login.token}`
    // }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)
// 响应拦截
_axios.interceptors.response.use(
  // 成功：接口响应成功，标志2开头
  (res) => {
    if (res.data.success) {
      return res.data
    } else {
      // 错误的消息提示
      Message.error(res.data.message)
      // 不执行后面的操作
      // 抛出一个错误，中止后面.then的执行。直接执行.catch
      return Promise.reject(new Error(res.data.message))
      // return new Promise((resolve, reject) => {
      //   reject(new Error(res.data.message))
      // })
    }
  },
  // 失败：接口状态码非2开头
  (error) => {
    console.dir(error)
    // token超时了
    // error不一定会有response
    if (error.response && error.response.status === 401) {
      // 删除token,删除用户信息，跳转到登陆页,可以提示一下
      store.commit('login/LOGOUT')
      // 提示一下
      Message.error(error.response.data.message)
      // 跳转登陆页
      router.push('/login')
    }
    return Promise.reject(error)
  }
)
export default _axios
